/**
 * 
 */
package cl.duocap.refaxion.view.bean;

import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;

import cl.duocap.refaxion.arquitectura.Jsf2Util;
import cl.duocap.refaxion.dto.MarcaDTO;
import cl.duocap.refaxion.dto.ModeloDTO;
import cl.duocap.refaxion.dto.UsuarioDTO;
import cl.duocap.refaxion.dto.VehiculoDTO;

import cl.duocap.refaxion.servicios.UsuarioService;
import cl.duocap.refaxion.servicios.VehiculoService;

/**
 * @author rentonx
 *
 */
@ManagedBean(name="formVehiculoEditarBean")
@SessionScoped
public class FormVehiculoEditarBean implements Serializable{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	private int idVehiculoEditar;
	private VehiculoDTO vehiculoEditar;
	@ManagedProperty("#{jsf2Util}")
	private Jsf2Util jsf2Util;
	private UsuarioDTO clienteAsignadoVehiculo;
	private boolean desabilitado = false; 
	private List<Integer> listaAnnos;
	private List<MarcaDTO> listaMarcasObtenidas;
	private List<ModeloDTO> listaModelosObtenidos;
	private Map<String, Integer> listadoDeMarcas;
	private Map<String, Integer> listadoDeModelos;

	
	

	/**
	 * 
	 */
	@PostConstruct
	public void iniciar(){
		if(FacesContext.getCurrentInstance().isPostback()){
			return;
		}
		//llena combo con años
		listaAnnos = new ArrayList<Integer>();
		for (Integer i = 2015; i > 1950; i--) {
			listaAnnos.add(i);
		}
		
		VehiculoService vehiculo = new VehiculoService();
		setListaMarcasObtenidas(vehiculo.listarMarcasVehiculos());
		
		//Codigo que para enviar la lista de tipo de usuarios como par de datos 
		listadoDeMarcas = new LinkedHashMap<String, Integer>();
		for (MarcaDTO t: listaMarcasObtenidas) {
			listadoDeMarcas.put(t.getMarcaDescripcion(), t.getIdMarca());
			
		}

		cargarVehiculoEditar();
	}
	
	public void cargarVehiculoEditar(){
		idVehiculoEditar = Integer.parseInt(jsf2Util.getParameter("idVehiculo"));
		VehiculoService vehiculo = new VehiculoService();
		setVehiculoEditar(vehiculo.cargarVehiculoEditar(idVehiculoEditar));
		UsuarioService cliente = new UsuarioService();
		setClienteAsignadoVehiculo(cliente.cargarUsuarioEditar(vehiculoEditar.getIdUsuario()));
		VehiculoService marcaVehiculo = new VehiculoService();
		vehiculoEditar.setIdMarca(marcaVehiculo.buscarMarcaVehiculo(vehiculoEditar.getIdModelo()).getIdMarca());

		listaModelos();
	
	}
	
	public void listarMarcas(){
		
		VehiculoService vehiculo = new VehiculoService();
		setListaMarcasObtenidas(vehiculo.listarMarcasVehiculos());

	}
	
	public void listaModelos(){
		try {
			
			VehiculoService vehiculo = new VehiculoService();
			int idmod =vehiculoEditar.getIdMarca();
			listaModelosObtenidos = vehiculo.listarModelosMarcaSeleccionada(idmod);
			
			
			//Codigo que para enviar la lista de tipo de usuarios como par de datos 
			listadoDeModelos = new LinkedHashMap<String, Integer>();
			for (ModeloDTO m: listaModelosObtenidos) {
				listadoDeModelos.put(m.getModeloDescripcion(),m.getIdModelo());

			}		

			} catch (Exception e) {
				 throw new RuntimeException("listar modelos en combo.",e);
			}
		
	}
	
	public String editarVehiculo(){

		SimpleDateFormat dateformatJava = new SimpleDateFormat("dd-MM-yyyy");
		vehiculoEditar.setFechaIngreso(dateformatJava.format(vehiculoEditar.getFechaIngresoTrans()));
		vehiculoEditar.setIdVehiculo(idVehiculoEditar);
		VehiculoService vehiculo = new VehiculoService();
		if(vehiculo.editarVehiculo(vehiculoEditar)){
			return "mainVehiculo.xhtml?faces-redirect=true";
			
		}else{
			return "formVehiculoEditar.xhtml?faces-redirect=true";
		}
	}
	
	
	public FormVehiculoEditarBean() {
		
	}
	
	public VehiculoDTO getVehiculoEditar() {
		return vehiculoEditar;
	}

	public void setVehiculoEditar(VehiculoDTO vehiculoEditar) {
		this.vehiculoEditar = vehiculoEditar;
	}



	public UsuarioDTO getClienteAsignadoVehiculo() {
		return clienteAsignadoVehiculo;
	}

	public void setClienteAsignadoVehiculo(UsuarioDTO clienteAsignadoVehiculo) {
		this.clienteAsignadoVehiculo = clienteAsignadoVehiculo;
	}

	public boolean isDesabilitado() {
		return desabilitado;
	}

	public void setDesabilitado(boolean desabilitado) {
		this.desabilitado = desabilitado;
	}

	public List<Integer> getListaAnnos() {
		return listaAnnos;
	}

	public void setListaAnnos(List<Integer> listaAnnos) {
		this.listaAnnos = listaAnnos;
	}

	public Map<String, Integer> getListadoDeMarcas() {
		return listadoDeMarcas;
	}

	public void setListadoDeMarcas(Map<String, Integer> listadoDeMarcas) {
		this.listadoDeMarcas = listadoDeMarcas;
	}

	public Map<String, Integer> getListadoDeModelos() {
		return listadoDeModelos;
	}

	public void setListadoDeModelos(Map<String, Integer> listadoDeModelos) {
		this.listadoDeModelos = listadoDeModelos;
	}

	public List<ModeloDTO> getListaModelosObtenidos() {
		return listaModelosObtenidos;
	}

	public void setListaModelosObtenidos(List<ModeloDTO> listaModelosObtenidos) {
		this.listaModelosObtenidos = listaModelosObtenidos;
	}

	public int getIdVehiculoEditar() {
		return idVehiculoEditar;
	}

	public void setIdVehiculoEditar(int idVehiculoEditar) {
		this.idVehiculoEditar = idVehiculoEditar;
	}

	public Jsf2Util getJsf2Util() {
		return jsf2Util;
	}

	public void setJsf2Util(Jsf2Util jsf2Util) {
		this.jsf2Util = jsf2Util;
	}

	public List<MarcaDTO> getListaMarcasObtenidas() {
		return listaMarcasObtenidas;
	}

	public void setListaMarcasObtenidas(List<MarcaDTO> listaMarcasObtenidas) {
		this.listaMarcasObtenidas = listaMarcasObtenidas;
	}

	

	
	
	
	

}
